<html>
<head>
  <title>MediaGoblin 0.9.0: The Three Goblineers</title>
  <meta name="date" contents="2016-03-29 13:00" />
  <meta name="author" contents="Deb Nicholson" />
  <meta name="tags" contents="mediagoblin, release" />
</head>
<body>

<p class="centered">
  <img src="/blog_images/0.9.0/three_goblineers-crop.png"
       alt="MediaGoblin 0.9.0: The Three Goblineers" />
  <br/>
  <i>
    "The Three Goblineers" by Christopher Allan Webber (pen and ink)
    and Morgan Lemmer-Webber (colored pencils).
    Licensed under
    <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>.
  </i>
</p>

<p>
  This release is called The Three Goblineers, because we are finally fully
  embracing Python 3!
  You could even think of this release as Py-oneering, which it definitely
  is.
  Many traditional web service tools are less-than-ideal for federation and
  so we've had to do a lot of rebuilding and retooling.
  This release represents lots of intense behind the scenes work to make
  the user experience smoother, as well as some key improvements for
  MediaGoblin developers and deployers.
</p>

<p>
  Federated services use databases in a some fundamentally different
  ways.
  We had to make a traditional (rigid) database more friendly for more
  flexible relationships.
  The result is similar to the generic foreign key implementation used by
  Django, but optimized especially for federation.
  Jessica Tallon did the lion's share of this work and was aided by Andrew
  Browning who did extensive testing.
</p>

<p>
  We also updated how we handle comments and media collections.
  On a multi-media service, people will naturally want to reply to comments
  with videos and to ASCII art with songs so we had to make our commenting
  function support all the available media types.
  Also, the media collections aren't just for your personal gallery
  anymore; they're also used now in federation and the API as the backbone
  of a user's "inbox" and "outbox" feeds.
  Also, to make life easier on those uploading whole albums of content, if
  your user has some collections available, these will be presented as a
  dropdown option while submitting media.
</p>

<p class="blog_image">
  <a href="/blog_images/0.9.0/select_collection.png">
    <img src="/blog_images/0.9.0/select_collection-scaled.png"
         alt="Selecting a collection during submit" /></a>
</p>

<p>
  In the less visible but equally important department, we updated OAuth
  and created a "graveyard" system.
  We updated our code to make better and more secure use of OAuth so that
  my server and your server can be really sure we are actually talking to
  each other.
  The "graveyard" system uses tombstone icons to let you know that an
  object was removed by it's original poster.
  This makes it easy for users to remove media they no longer want to
  share, while creating as little confusion as possible for other users.
</p>

<p><pre>
              *                      *
 *                      *                  _.     *
      *           *          *            &lt;  '.
             *                             )  )       *
                                    *     &lt;_.'   *
    *      *        .-------------.
                  .'               '.                *
       *          |                 |   *
                  |   TOMB OF THE   |       *
            *     |     UNKNOWN     |            *
   *              | ACTIVITYSTREAMS |
                  |     OBJECT      |
             .^.  |                 |
  _  .+.  _  |~|  |    ????-????    |  .+. .-.  _  .-.
 | | |~| |=| | |  |                 |  |=| |~| | | |"|
``'`'`''``'`'`'`'``'``'`'`''``'`'`'`'``'`''``''``'`'`''
</pre></p>

<p>
  Developers will be happy to know that we are keeping pace with the larger
  Python community and now have complete support for Python 3.
  We had
  <a href="http://mediagoblin.org/news/mediagoblin-0.8.0-gallery-of-fine-creatures.html">early
    and experimental Python 3 support in 0.8.0</a>
  but couldn't quite recommend it for production use.
  That work is finished!
  Now you can choose to hack in Python 3 or Python 2 and your code will be
  totally compatible with the main codebase.
  Since Python 2 won't be supported forever, Python 3 is the future.
  And we are all about the future.
</p>

<p>
  We also switched our migration system over to
    <a href="https://alembic.readthedocs.org/en/latest/">Alembic</a>.
  Previously, we'd been using
    <a href="https://sqlalchemy-migrate.readthedocs.org/en/latest/">sqlalchemy-migrate</a>,
    but it also wasn't as good for updating the database layout when you upgrade,
  and lots of dragons be there.
  We think Alembic will make it less terrifying to update your MediaGoblin
  instance so you can stay current and without spending lots of time trying
  to sort what happened in the database.
  Alembic is also newer, fresher and better maintained!
</p>

<p>
  Another thing that makes updating a little persnickety is finding out that
  the dependencies have changed.
  We are collaborating and experimenting with the
  <a href="http://www.gnu.org/software/guix/">Guix</a> community to fix
  this issue.
  Cleaner packaging will help people upgrade without fear, using
  deployments they can trust.
  Watch this space for a future post on how to use Guix and MediaGoblin
  together for worry-free upgrades.
</p>

<p>
  For users upgrading from previous versions, as always, check the
  <a href="http://mediagoblin.readthedocs.org/en/stable/siteadmin/relnotes.html">
    release notes</a> for instructions on upgrading!
</p>

<p>
  Our work to overthrow the red eminence of the centralized web continues!
  Between Python 3 support and laying down foundational changes to support
  federation, this release brings us much, much closer to our long term
  goals!
  Thanks to all our Goblineers and Py-oneers without whom this work would
  not be possible!
  Give a round of applause to Andrew Browning, Ben Sturmfels, Berker
  Peksag, Boris Bobrov, Christopher Allan Webber, Daniel Krol, Deb
  Nicholson, Duncan, jerome, Jessica Tallon, Loic Dachary, Sebastian
  Spaeth, Tom Fay, and 宋文武!
  You all helped make it happen!
</p>

<p>
  And if you want to make it happen in our next exciting release, we'd love
  to have you <a href="http://mediagoblin.org/pages/join.html">get involved</a>!
  Visit us in IRC;
  <a href="http://webchat.freenode.net/?channels=mediagoblin">#mediagoblin on freenode.net</a>!
  Or sign up for regular updates
  <a href="http://lists.mediagoblin.org/listinfo/devel">on our mailing list</a>.
  Got ideas or questions about our work?
  Email us at <a href="press@mediagoblin.org">press@mediagoblin.org</a>
  -- we look forward to hearing from you!
</p>
</body>
</html>
